package com.woniuxy.yogaapp.handler;

import com.woniuxy.yogaapp.pojo.Attention;
import com.woniuxy.yogaapp.pojo.Chat;

import com.woniuxy.yogaapp.pojo.ChatImage;
import com.woniuxy.yogaapp.pojo.Consultation;
import com.woniuxy.yogaapp.service.InfoService;
import com.woniuxy.yogaapp.util.JsonUtil;
import com.woniuxy.yogaapp.util.TimeUtil;

import org.apache.ibatis.annotations.Select;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * 处理信息方面的请求
 */
@RestController
@RequestMapping("/info")
@Scope("prototype")
public class InfoHandle {

    @Resource
    private InfoService infoService;

    /**
     * 查找说说
     * @param uid
     * @return
     */
    @RequestMapping("/findSay")
    public List<Attention> findAllSay(Integer uid) {

        //参数合法性判断
        if (uid == null || uid == 0) {
            return null;
        }

        //查找所有关注对象的说说
        List<Attention> allSay = infoService.findAllSay(uid);
        return allSay;
    }

    /**
     * 添加说说
     * @param chat
     * @return
     */
    @RequestMapping("/addSay")
    public Integer addSay(Chat chat) throws IOException {

        //信息合法性判断
        if (chat.getSender() == null ||chat.getSender() == 0) {
            return null;
        }
        //信息不能为空
        if (chat.getMes() == null || chat.getMes().length() == 0) {

            return null;
        }
        //完善说说信息
        chat.setState("未读");
        chat.setMestime(TimeUtil.getNowDate());
        chat.setMestype(5);
        //添加说说并返回结果
        return infoService.addSay(chat);
    }

    /**
     * 查找用户发的说说
     * @param meUid
     * @return
     */
    @RequestMapping("/findUserSay")
    public List<Chat> findUserSay(Integer meUid) {
        //非法判断
        if (meUid == null || meUid == 0) {
            return null;
        }
        List<Chat> userSay = infoService.findUserSay(meUid);
        //查找用户发的说说
        return userSay;
    }

    /**
     * 根据通知的chatid删除通知
     * @param chatid
     * @return
     */
    @RequestMapping("/deleteChat")
    public String deleteChat(Integer chatid) {
        //非法性判断
        if (chatid == null || chatid == 0) {
            return "";
        }
        //删除通知
        return infoService.deleteChat(chatid);
    }

    /**
     * 查找私聊信息
     * @param meUid 我的id
     * @param otherUid 好友的id
     * @return
     */
    @RequestMapping("/findPrivateChat")
    public List<Chat> findPrivateChat(Integer meUid, Integer otherUid) {

        //参数非法性检验
        if (meUid == null || meUid == 0 || otherUid == null || otherUid == 0) {
            return null;
        }

        //查找私聊信息
        return infoService.findPrivateChat(meUid, otherUid);
    }

    /**
     * 动态查询通知
     * @param chat
     * @return
     */
    @RequestMapping("/findChat")
    public List<Chat> findChat(Chat chat) {
        if (chat == null) {
            return null;
        }
        return infoService.findChat(chat);
    }


    /**
     * 修改通知的的状态和类型
     * @param chat
     */
    @RequestMapping("/updateChat")
    public void updateChat(Chat chat) {

        //修改信息状态
        infoService.updateChat(chat);
    }

    /**
     * 修改其他类型（除私聊以外的）通知的的状态和类型
     * @param uid
     */
    @RequestMapping("/updateOtherChat")
    public void updateOtherChat(Integer uid) {
        if (uid == null || uid == 0) {
            return;
        }
        //修改信息状态
        infoService.updateOtherChat(uid);
    }

    /**
     * 动态查询信息的条数（chatid，sender，recipient,mes,state,mestype）
     * @param chat
     * @return
     */
    @RequestMapping("/findUnreadInfo")
    public Integer findUnreadInfo(Chat chat) {
        return infoService.findUnreadInfo(chat);
    }

    /**
     * 说说上传图片
     * @param files
     * @param chatid
     * @param request
     * @return
     * @throws IOException
     */
    @RequestMapping("/multipleImageUpload")
    public String multipleImageUpload(@RequestParam("uploadFiles") MultipartFile[] files,Integer chatid, HttpServletRequest request) throws IOException {

        //合法性判断
        if (files == null || chatid == null || chatid ==0) {
            return "";
        }
        String result_msg = "上传成功";

        //存放图片的相对路径
        List<ChatImage> chatImages = new ArrayList<>();
        for (MultipartFile file : files) {    //循环保存文件
            //判断上传文件格式
            String fileType = file.getContentType();
            if (fileType.equals("image/jpeg") || fileType.equals("image/png") || fileType.equals("image/jpeg")) {
                // 执行到此处，前端提交的数据全拿到了
                // 1.将文件保存到Tomcat服务器本地
                // 1.1.获取保存文件的文件夹的路径
                String path = request.getServletContext().getRealPath("");
                File dir = new File(path);
                // 获得webapp文件夹的file对象
                File webapp = dir.getParentFile();
                String fileName = file.getOriginalFilename();
                // 生成新文件名
                String newName = UUID.randomUUID().toString();
                // 得到文件后缀名
                String type = fileName.substring(fileName.lastIndexOf("."));
                newName += type;
                // 拼接新文件的路径
                File uploadFile = new File(webapp, "webapp\\image\\" + newName);
                // 1.2.将文件保存到服务器本地
                file.transferTo(uploadFile);
                // 2.1.获取文件的路径（相对路径），将所有的注册信息保存到数据库
                ChatImage chatImage = new ChatImage();
                chatImage.setChatid(chatid);
                chatImage.setImage("/image/" + newName);
                chatImages.add(chatImage);
            } else {
                result_msg = "图片格式不正确";
                return result_msg;
            }
        }
        //把图片的相对路径存入数据库中
        return infoService.addImage(chatImages);
    }

    /**
     * 修改私聊信息的未读为已读
     * @param chat
     */
    @RequestMapping("/updatePrivateChat")
    public void updatePrivateChat(Chat chat) {
        //参数合法性判断
        if (chat.getSender() == null || chat.getSender() ==0 || chat.getRecipient() == null || chat.getRecipient() == 0) {
            return;
        }

        infoService.updatePrivateChat(chat);

    }

    /**
     * 查找咨询信息
     * @param meUid 我的id
     * @param otherUid 好友的id
     * @return
     */
    @RequestMapping("/findConsultationChat")
    public List<Chat> findConsultationChat(Integer meUid, Integer otherUid) {

        //参数非法性检验
        if (meUid == null || meUid == 0 || otherUid == null || otherUid == 0) {
            return null;
        }

        //查找私聊信息
        return infoService.findConsultationChat(meUid, otherUid);
    }

    /**
     * 修改私聊信息的未读为已读
     * @param chat
     */
    @RequestMapping("/updateConsultationChat")
    public void updateConsultationChat(Chat chat) {
        //参数合法性判断
        if (chat.getSender() == null || chat.getSender() ==0 || chat.getRecipient() == null || chat.getRecipient() == 0) {
            return;
        }

        infoService.updateConsultationChat(chat);

    }

}
